package thread;

/**
 * 多线程
 * 线程:一个单一的顺序执行流程就是一个线程
 * 多线程:多个线程并发执行
 * 并发执行:CPU在每个线程间快速切换运行,造就一种感官同时运行的效果.
 *        即:微观世界每个线程的代码都是走走停停的(CPU执行哪个线程的代
 *           码时其他线程的代码都不会执行).宏观感觉在一起运行的现象.
 * 使用多线程可以改变程序的执行方式,从原有的单一顺序执行(代码从上至下
 * 一句一句执行)改变为多个代码片段"同时"执行.使得代码执行时互相不牵绊.
 *
 * 当有多个代码片段需要"同时"运行时,只需要将他们放在不同的线程上,并让
 * 这些线程运行起来,他们就会并发运行了.
 * 创建线程的方式有两种,方式一:
 * 继承Thread并重写run方法(run方法中就是该线程要执行的任务代码)
 */
public class ThreadDemo1 {
    public static void main(String[] args) {
        Thread t1 = new MyThread1();
        Thread t2 = new MyThread2();

        t1.start();
        t2.start();

    }
}

/**
 * 第一种创建线程的方式优点是结构简单,利于使用匿名内部类形式创建.
 * 缺点有两个:
 * 1:由于java是单继承的,这导致如果继承了Thread就无法再继承其他的类
 *   去复用方法,实际开发很不方便.
 * 2:定义线程的同时重写run方法,将线程要执行的任务定义在了线程中,这导致
 *   线程与任务绑定在了一起,不利于线程的重(chong)用.
 */
class MyThread1 extends Thread{
    public void run(){
        for(int i=0;i<1000;i++){
            System.out.println("你是谁啊?");
        }
    }
}
class MyThread2 extends Thread{
    public void run(){
        for(int i=0;i<1000;i++){
            System.out.println("开门,查水表的!");
        }
    }
}